package com.xiti.student.base.service;


import cn.jpush.api.device.TagAliasResult;
import cn.jpush.api.push.model.Platform;
import com.xiti.student.base.entity.JPushExtra;


import java.util.Set;

/**
 * <p>
 * JPush 服务
 * </p>
 *
 * @author tangz
 * @since 2018-05-28
 */
public interface JPushService{

    /**
     * 【平台】根据平台类型推送
     * @param platform Platform.android_ios(),Platform.android(),Platform.ios()
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     *              例子：sendPushAll(Platform.android_ios(),new JPushExtra("10","10","111"),"你好");
     */
    void sendPushAll(Platform platform, JPushExtra extras, String alert);

    /**
     * 【单用户】根据registrationId推送
     * @param registrationId  极光注册id
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     *              例子：sendPushAll(Platform.android_ios(),new JPushExtra("10","10","111"),"你好");
     */
    void sendPushRegId(String registrationId, JPushExtra extras, String alert);

    /**
     * 【多用户】根据registrationId推送
     * @param registrationIds  极光注册id
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     */
    void sendPushRegIdCollection(Set<String> registrationIds, JPushExtra extras, String alert);

    /**
     * 【别名】根据alias推送
     * @param alias  别名
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     */
    void sendPushAlias(String alias, JPushExtra extras, String alert);

    /**
     * 【多别名】根据alias推送
     * @param alias  别名
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     */
    void sendPushAliasCollection(Set<String> alias, JPushExtra extras, String alert);

    /**
     * 【Tag】根据alias推送
     * @param tag  标签
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     */
    void sendPushTag(String tag, JPushExtra extras, String alert);

    /**
     * 【多Tag】根据alias推送
     * @param tag  标签
     * @param extras new JPushExtra("10","10","111")
     * @param alert 文本
     */
    void sendPushTagCollection(Set<String> tag, JPushExtra extras, String alert);

    /**
     * 根据registrationId 清空 clearAlias 或者 clearTag
     * @param registrationId
     * @param clearAlias
     * @param clearTag
     */
    void updateDeviceTagAlias(String registrationId, boolean clearAlias, boolean clearTag);

    /**
     * 根据registrationId 设置alias 和 tag
     * @param registrationId
     * @param alias
     * @param tagsToAdd
     * @param tagsToRemove
     */
    void updateDeviceTagAlias(String registrationId, String alias, Set<String> tagsToAdd, Set<String> tagsToRemove);

    /**
     * 根据registrationId 获取alias 和 tag
     * @param registrationId
     * @return
     */
    TagAliasResult getDeviceTagAlias(String registrationId);

}
